Skip to content

Document Nexus with Multi-Cluster Replication for self-hosted#4906

Merged
Duncanma merged 58 commits into
mainfrom
stephan/self-hosted-nexus-global-namespaces
Jul 21, 2026
Merged

Document Nexus with Multi-Cluster Replication for self-hosted#4906
Duncanma merged 58 commits into
mainfrom
stephan/self-hosted-nexus-global-namespaces

Conversation

@stephanos

@stephanos stephanos commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

WISOTT

Documents how Nexus Operation completion callbacks behave when a Global
Namespace fails over between clusters, and the configuration required for
worker-target endpoints: endpoint registry parity, replicated Namespaces,
auto-forwarding, and a frontend httpPort plus advertised httpAddress on every
cluster. Reorders "Build and use Nexus Services" above the new section.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 17, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
temporal-documentation Ready Ready Preview, Comment Jul 21, 2026 6:37pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📖 Docs PR preview links

stephanos and others added 2 commits July 17, 2026 07:49
- Capitalize Temporal proper nouns (Cluster, Namespace, Workflow, Worker,
  Task Queue, Endpoint, Nexus Operation) to match sibling multi-cluster docs.
- Replace em-dashes with plain punctuation; drop "e.g."/"via" per style guide.
- Add that caller and handler Namespaces can be active on different Clusters
  (per-Namespace active cluster), so cross-Cluster completion forwarding is a
  steady state, handled automatically once httpAddress is advertised.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Move the target-type scope into a note that also mentions external-target
  Endpoints (--target-url) for completeness.
- Vale pass: fix Worker casing, use contractions, split the long intro
  sentence, and use "automatic forwarding" instead of "auto-forwarding".

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…tion

- Split auto-forwarding into its two required parts: the static
  dcRedirectionPolicy (defaults to no redirection) and the per-Namespace
  system.enableNamespaceNotActiveAutoForwarding dynamic config.
- Trim the httpAddress step to the Nexus-specific delta (httpPort + httpAddress)
  and defer base clusterMetadata/rpcAddress setup to the Multi-Cluster
  Replication page it links to.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ion entry

- Link dcRedirectionPolicy to references/configuration, its canonical entry.
- Clarify that the per-Cluster clusterInformation entry already contains the
  replication fields (enabled, rpcName, rpcAddress, initialFailoverVersion) and
  that httpAddress is added to it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
stephanos and others added 4 commits July 17, 2026 11:36
Step 3 repeated the httpPort/httpAddress config already shown in Enable Nexus.
Reference that section and keep only the multi-cluster delta: set them on every
Cluster, plus the operator cluster upsert caveat.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Compress the 'What to expect on failover' list from five verbose bullets to
four, folding the async-replication caveat into the permanent-loss point.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
stephanos and others added 2 commits July 17, 2026 11:41
It conflated the dynamic cluster-connection flow with the static-config
instruction; httpAddress is set in static clusterInformation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Explain system.enableNamespaceNotActiveAutoForwarding (per-Namespace,
  defaults to true) and note it has the opposite default of dcRedirectionPolicy.
- Redraw the failover sequence so replication (not a failover-time handoff)
  carries state to Cluster B; remove the misleading A->B arrow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
stephanos and others added 2 commits July 17, 2026 11:47
- Remove semicolon from a sequence-diagram Note (mermaid treats ; as a
  statement separator, causing a render-time parse error).
- Reword enableNamespaceNotActiveAutoForwarding as 'make sure it isn't turned
  off' since it defaults to true.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Drop the literal quotes and wrap the replication note across two lines so the
Note-over box doesn't overflow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
default via `system.enableNamespaceNotActiveAutoForwarding` (per-Namespace
dynamic config).

Optionally, set the server's

@stephanos stephanos Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't sure if this should be optional or recommended?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure either TBH and not sure this information should go here, /self-hosted-guide/multi-cluster-replication seems like a better fit.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bergundy I'll leave remove it and open a separate PR for /self-hosted-guide/multi-cluster-replication

Replace the manual jsdom global-copy loop with a one-line
'import global-jsdom/register'. (jsdom-global is unmaintained and doesn't expose
the globals mermaid's box syntax needs; global-jsdom does.) Swap the direct
jsdom devDependency for global-jsdom.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Comment thread scripts/lint-mermaid.mjs
// Set up a browser-like DOM before loading mermaid. mermaid.parse() uses DOM
// APIs for some diagram syntaxes (for example a sequence diagram `box`) and
// otherwise fails headless with "window is not defined".
import 'global-jsdom/register';

@stephanos stephanos Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was needed to make the mermaid chart above work; the box is crucial to convey the topology clearly.

stephanos and others added 5 commits July 17, 2026 13:34
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@stephanos
stephanos marked this pull request as ready for review July 17, 2026 20:45
@stephanos
stephanos requested a review from a team as a code owner July 17, 2026 20:45
@stephanos
stephanos requested a review from bergundy July 17, 2026 20:45

@bergundy bergundy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved, but please fix the experimental note before merging.

title: Self-hosted Temporal Nexus
sidebar_label: Temporal Nexus
description: Use Nexus in your self-hosted Temporal Service.
description: Use Nexus in your self-hosted Temporal Service, including across Global (multi-region) Namespaces.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm hesitant add this here. Multi-cluster support is experimental.

tags:
- Self hosting
- enable-nexus
- global-namespace

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this terminology is outdated and we call this multi-cluster-replication now.


:::

## Global Namespaces (multi-region failover)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make a note that this is experimental and the mechanism here is likely to change.

default via `system.enableNamespaceNotActiveAutoForwarding` (per-Namespace
dynamic config).

Optionally, set the server's

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure either TBH and not sure this information should go here, /self-hosted-guide/multi-cluster-replication seems like a better fit.

@stephanos stephanos changed the title Document Nexus with Global Namespaces (multi-region failover) for self-hosted Document Nexus with Multi-Cluster Replication for self-hosted Jul 21, 2026
…step

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Duncanma
Duncanma enabled auto-merge (squash) July 21, 2026 18:34
@Duncanma
Duncanma merged commit 6dee623 into main Jul 21, 2026
13 checks passed
@Duncanma
Duncanma deleted the stephan/self-hosted-nexus-global-namespaces branch July 21, 2026 18:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants